#ifndef _MAT__H
#define _MAT__H

/*-----------------------------------------
创建于2019/7/24
By Fyra-BH
文件名:mat.h

描述:旋转矩阵的可视化测试
---------------------------------------
//坐标点如图：
//								 A ******************* B
//									*|                **
//								 * |               * *
//							C ******************* D*
//								*  |              *  *
//								*  |              *  *
//								*  |              *  *
//								*  |______________*__*
//								* /A1             * *B1
//								*                 **
//							C1*******************D1

//参考 http://www.crazepony.com/wiki/software-algorithm.html

//------------------------------------------*/

#include <math.h>
#include <stdio.h>
#include <stdint.h>

#define pi 3.1415926f

typedef struct // 三维坐标点结构体
{
    float x;
    float y;
    float z;
} point_t;

typedef struct // 立方体，由8个顶点确定
{
    point_t A;
    point_t B;
    point_t C;
    point_t D;
    point_t A1;
    point_t B1;
    point_t C1;
    point_t D1;
} cube_t;


typedef struct // 3*3矩阵
{
    float m1[3];
    float m2[3];
    float m3[3];
} mat3x3_t;

void print_matrix(mat3x3_t mat); // 打印一个矩阵

mat3x3_t mat_multi(mat3x3_t *mat1, mat3x3_t *mat2);                  // 3x3矩阵乘法
//void draw_proj_line(point_t p1, point_t p2, unsigned short color);   // 画出线的投影(默认投影面为XOY面)
void draw_visibel_line(point_t p1, point_t p2, unsigned long color); // 画出线的可视部分(默认投影面为XOY面)
void draw_proj_cube(cube_t c);                                       // 画出立方体的投影(默认投影面为XOY面)
void draw_visibel_cube(cube_t c);                                    // 画出立方体的可视部分(默认投影面为XOY面)
void erase_proj_cube(cube_t c);                                      // 擦除立方体的投影(默认投影面为XOY面)
void creat_center_cube(cube_t *c, float len);                        // 生成一个中心立方体
void rotate_point(point_t *p, float roll, float pitch, float yaw);   // 旋转一个点
void rotate_cube(cube_t *cb, float roll, float pitch, float yaw);    // 旋转一个立方体

#endif
